#include <iostream>
using namespace std;

int main() {
    long long n, m, a, b;
    cin >> n >> m >> a >> b;
    long long ans = 0;
    for (int x = 0; x <= min(n / 2, m); x++)
    {
        long long y = min(n - 2 * x, (m - x) / 2);
        ans = max(ans, x * a + y * b);
    }
    cout << ans;
    return 0;
}

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int prices[N];
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> prices[i];
    }
    if (n <= 1)
    {
        cout << 0 << endl;
    }
    int maxprice = prices[n - 1];
    long long ans = 0;
    for (int i = n - 2; i >= 0; i--)
    {
        if (maxprice <= prices[i])
        {
            maxprice = prices[i];
        }
        else {
            if (i && prices[i - 1] <= prices[i])
            {
                continue;
            }
            else {
                ans += (maxprice - prices[i]);
                maxprice = 0;
            }
        }
    }
    cout << ans;
    return 0;
}
// 64 位输出请用 printf("%lld")


#include <iostream>
#include <cstring>
#include <string>
#include <vector>
using namespace std;

int main() {
    string s;
    vector<string> a;
    getline(cin, s);
    int j = 0;
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == ' ' || s[i] == '.')
        {
            string q = s.substr(j, i - j);
            j = i + 1;
            if (s[i] == '.')
            {
                q += '.';
                a.push_back(q);
            }
            else {
                a.push_back(q);
            }
        }
    }
    for (int i = a.size() - 1; i >= 0; i--)
    {
        if (i)
        {
            cout << a[i] << " ";
        }
        else {
            cout << a[i];
        }
    }
    return 0;
}

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    string s;
    string a;
    getline(cin, s);
    cin >> a;
    for (int i = 0; i < s.size(); i++)
    {
        if (a.find(s[i]) != string::npos)
        {
            s[i] = '?';
        }
    }
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] != '?')
        {
            cout << s[i];
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
//class Solution {
//public:
//    ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) {
//        ListNode* phead1, * phead2;
//        phead1 = pHead1;
//        phead2 = pHead2;
//        while (phead1 && phead2)
//        {
//            if (phead1 == phead2)
//            {
//                return phead1;
//            }
//            else {
//                phead1 = phead1->next;
//                phead2 = phead2->next;
//            }
//        }
//        if (phead1 == nullptr)
//        {
//            phead1 = pHead2;
//            while (phead2)
//            {
//                phead2 = phead2->next;
//                phead1 = phead1->next;
//            }
//            phead2 = pHead1;
//            while (phead1 && phead2)
//            {
//                if (phead1 == phead2)
//                {
//                    return phead1;
//                }
//                else {
//                    phead1 = phead1->next;
//                    phead2 = phead2->next;
//                }
//            }
//            return nullptr;
//        }
//        else {
//            phead2 = pHead1;
//            while (phead1)
//            {
//                phead2 = phead2->next;
//                phead1 = phead1->next;
//            }
//            phead1 = pHead2;
//            while (phead1 && phead2)
//            {
//                if (phead1 == phead2)
//                {
//                    return phead1;
//                }
//                else {
//                    phead1 = phead1->next;
//                    phead2 = phead2->next;
//                }
//            }
//            return nullptr;
//        }
//    }
//};


// #include <iostream>
// using namespace std;
// long long ans = 0;
// void dfs(const string& s, int n, char o) {
//     if (n >= s.size()) {
//         return;
//     }
//     while (n < s.size()) {
//         if (s[n] == o && o == 's') {
//             dfs(s, n + 1, 'h');
//         }
//         if (o == 'h' && s[n] == o) {
//             dfs(s, n + 1, 'y');
//         }
//         if (o == 'y' && s[n] == o) {
//             ans++;
//         }
//         n++;
//     }
// }
// int main() {
//     int n;
//     string s;
//     cin >> n;
//     cin >> s;
//     dfs(s, 0, 's');
//     cout << ans;
//     return 0;
// }

#include <iostream>
#include <string>

using namespace std;

int main() {
    int n;
    string s;
    cin >> n;
    cin >> s;

    long long sCount = 0; // 以's'结尾的子序列数量
    long long hCount = 0; // 以'h'结尾的子序列数量
    long long yCount = 0; // 以'y'结尾的子序列数量

    for (char a : s) {
        if (a == 's') {
            sCount++;
        }
        else if (a == 'h') {
            hCount += sCount;
        }
        else if (a == 'y') {
            yCount += hCount;
        }
    }
    cout << yCount << endl;

    return 0;
}